home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 2001-09-09 | 3.9 KB | 168 lines |
- Dim LINS(500)
- Global LINS(),LIN,LI
- While Screen>=0 : Screen Close Screen : Wend
- AMOSMORE["S:Startup-sequence"]
- Procedure AMOSMORE[F$]
- Gosub INIT
- Gosub LEAFIL
- Do
- XM=X Mouse-128 : YM=Y Screen(6,Y Mouse) : MM=Mouse Key : BU=0
- Dec TIM : If TIM=0 Then M$="" : Gosub DISPLAYMESS
- If XM>95 and MM=1 Then BU=(XM-80)/16
- If BU and BUA=0 Then BUA=BU : Screen 6 : Paste Icon BU*16+80,0,BU+15 : Screen 7
- If BUA=1 Then MO=1
- If BUA=2 Then MO=0
- If BUA=3 Then MO=2
- If BUA=4 Then Gosub LINDOWN
- If BUA=5 Then Gosub LINUP
- If BUA=6 and MM=0 Then Gosub PAGEDOWN
- If BUA=7 and MM=0 Then Gosub PAGEUP
- If BUA=8 and MM=0 Then LIN=0 : Gosub PAGEDOWN
- If BUA=9 and MM=0 Then LIN=LI-1 : Gosub PAGEUP
- If BUA=11 and MM=0 Then F$="" : Gosub LEAFIL
- If BU=0 and BUA>0 Then Screen 6 : Paste Icon BUA*16+80,0,BUA+1 : Screen 7 : BUA=0
- On MO+1 Gosub SOFTSTOP,SOFTDOWN,SOFTUP
- Loop
- End
- SOFTSTOP:
- Screen Offset 7,0,Y+8
- If Y mod 8>0 and RD=1 Then Add Y,1,0 To 239
- If Y mod 8>0 and RD=-1 Then Add Y,-1,0 To 239
- If Timer<1 Then Wait Vbl
- Timer=0
- Return
- SOFTDOWN:
- RD=1
- If Y mod 8=0 Then Gosub NEXLIN
- If LIN<LI Then Screen Offset 7,0,Y+8 : Add Y,1,0 To 239
- If Timer<1 Then Wait Vbl
- Timer=0
- Return
- LINDOWN:
- If LIN>LI Then Return
- Y=Y-(Y mod 8)+8
- Gosub NEXLIN
- Add Y,8,0 To 239
- Screen Offset 7,0,Y+8
- If Timer<1 Then Wait Vbl
- Timer=0
- MO=0
- Return
- NEXLIN:
- A$="" : If LIN=LI Then Return
- P=LINS(LIN)
- Repeat
- A=Peek(ST+P) : Inc P
- If A<>10 Then A$=A$+Chr$(A)
- Until A=10 or P=>LE or Len(A$)>79
- Ink 0 : Bar 0,Y To 639,Y+7
- Ink 1,0 : Text 0,Y+6,A$
- Screen Copy 7,0,Y,639,Y+8 To 7,0,Y+240
- Inc LIN
- Return
- SOFTUP:
- RD=-1
- If Y mod 8=7 Then Gosub PRELIN
- If LIN>0 Then Screen Offset 7,0,Y+8 : Add Y,-1,0 To 239
- If Timer<1 Then Wait Vbl
- Timer=0
- Return
- LINUP:
- If LIN=0 Then Return
- Y=Y-(Y mod 8)
- Gosub PRELIN
- Add Y,-8,0 To 239
- Screen Offset 7,0,Y+8
- If Timer<1 Then Wait Vbl
- Timer=0
- MO=0
- Return
- PRELIN:
- A$="" : If LIN<30 Then Return
- P=LINS(LIN-30)
- Repeat
- A=Peek(ST+P) : Inc P
- If A<>10 Then A$=A$+Chr$(A)
- Until A=10 or P<0 or Len(A$)>79
- Ink 0 : Bar 0,Y+1 To 639,Y+8
- Ink 1,0 : Text 0,Y+7,A$
- Screen Copy 7,0,Y+1,639,Y+9 To 7,0,Y+241
- Dec LIN
- Return
- PAGEDOWN:
- Y=Y-(Y mod 8)+8
- For SSS=LIN To Min(28+LIN,LI)
- Gosub NEXLIN
- Add Y,8,0 To 239 : Screen Offset 7,0,Y+8
- If Timer<1 Then Wait Vbl
- Timer=0
- Next
- MO=0
- Return
- PAGEUP:
- Return
- QUIT:
- Screen Close 6 : Screen Close 7
- Pop
- Pop Proc
- LEAFIL:
- Screen 7 : Cls 0
- Repeat
- If F$=""
- F$=Fsel$("","","AMOS More Request","Load an text file!")
- If F$=""
- M$="Quitting AMOS More..." : Gosub DISPLAYMESS : Wait 50
- Pop : Gosub QUIT
- End If
- End If
- If F$<>"" Then If Exist(F$)=0
- M$="Error: File not found!" : Gosub DISPLAYMESS : Wait 100
- End If
- Until F$<>""
- M$="Loading "+Left$(F$,30) : Gosub DISPLAYMESS
- Open In 7,F$
- LE=Lof(7)+3
- Reserve As Work 16,LE
- ST=Start(16)
- Extension_8_17A6 7 To ST+2,LE-1
- Poke ST+1,10
- Poke ST+LE-1,10
- Close 7
- M$="Counting lines..." : Gosub DISPLAYMESS
- LI=0
- For A=1 To LE-1
- If Peek(ST+A)=10 Then LINS(LI)=A+1 : Inc LI
- Next
- M$=Str$(LE)-" "+" bytes in"+Str$(LI)+" lines." : Gosub DISPLAYMESS
- Screen Offset 7,0,8 : Y=0
- P=2 : Gosub PAGEDOWN
- Return
- INIT:
- Screen Open 6,320,27,8,0
- Curs Off : Flash Off : Paper 3 : Pen 1 : Cls 0
- Screen Display 6,128,273,320,27
- Get Icon Palette
- No Icon Mask
- Paste Icon 0,0,1
- For A=0 To 13
- Paste Icon 96+A*16,0,A+2
- Next
- Ink 3 : Bar 1,16 To 318,25
- Plot 0,26 : Plot 319,16
- Ink 2 : Draw 0,25 To 0,16 : Draw To 318,16
- Ink 4 : Draw 1,26 To 319,26 : Draw To 319,17
- Limit Mouse
- Screen Open 7,640,496,2,$8000
- Curs Off : Palette $FFF,0
- Screen Display 7,128,40,320,232
- Screen Offset 7,0,8
- Return
- DISPLAYMESS:
- SSS=Screen
- Screen 6
- Ink 3 : Bar 1,17 To 317,25
- Ink 1,3 : Text 2,24,M$
- TIM=100
- Screen SSS
- Return
- End Proc